package br.com.virtual.cadastrar.model;

import java.util.Calendar;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;

import br.com.virtual.base.enums.TipoPessoaEnum;
import br.com.virtual.base.listener.VirtualEntityListener;

@Entity
@EntityListeners({ VirtualEntityListener.class })
public class PessoaFisica extends Pessoa {

	private static final long serialVersionUID = 2L;

	private String apelido;
	
	@Column(unique = true, nullable = false)
	private String cpf;
	
	private Calendar dataNascimento;

	public PessoaFisica() {
		setTipoPessoa(TipoPessoaEnum.FISICA);
	}

	/*
	 * Getters and SETTERS
	 */
	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public Calendar getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Calendar dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public String getApelido() {
		return apelido;
	}

	public void setApelido(String apelido) {
		this.apelido = apelido;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result + ((cpf == null) ? 0 : cpf.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		PessoaFisica other = (PessoaFisica) obj;
		if (cpf == null) {
			if (other.cpf != null)
				return false;
		} else if (!cpf.equals(other.cpf))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "PessoaFisica [getCpf()=" + getCpf() + ", getDataNascimento()="
				+ getDataNascimento() + ", getId()=" + getId() + ", getNome()="
				+ getNome() + ", getEmail()=" + getEmail()
				+ ", getTelefone1()=" + getTelefone1() + ", getTelefone2()="
				+ getTelefone2() + ", isNewsLetter()=" + isNewsLetter()
				+ ", isAtivo()=" + isAtivo() + ", getUsuario()=" + getUsuario()
				+ "]";
	}

}